/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Vue;

import Controleur.Util;
import Modele.Contact;
import Vue.Design.DesignFenetre;
import java.awt.Color;
import java.awt.Component;
import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Image;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import sun.reflect.Reflection;

/**
 * Objet generique pour representer l'affichage/edition des infos d'un contact.
 * Deux classes en heritent : une pour l'affichage pur des infos (avec des JLabel), 
 * une autre pour l'edition des infos (avec des JTextField).
 * Le but est de rassembler le code commun aux deux implementations, ce qui simplifie 
 * le developpement et unifie l'affichage des deux implementations (que l'on affiche les 
 * infos ou que l'on affiche le paneau d'edition, les composants sont organises de la meme maniere).
 * <br/>
 * Possibilite d'ameliorer le code en utilisant la genericite (pour les variables membres).
 * @author Jo
 */
public abstract class PanelDroiteAbstract/*<? extends JLabel>*/ extends JPanel {
    
    JPanel panelEntete, panelCorps, panelNomPrenom;
    
    public JLabel labelIcone;
    JComponent labelNom, labelPrenom, 
            labelTelMobile, labelTelMaison, labelTelBureau, labelAdresse, labelSite, labelEmail;
    JLabel labelIntitule;
    
    String stringInitial=" ";
    int margeGauche = 7;
    int margeHaut = 5;
    int xMax = 0;
    int idContact=0;
    
    
    protected void init(){
        labelIcone = new JLabel("");
        
        this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        this.setOpaque(false);
        
        //Entete
        panelEntete = new JPanel();
        panelEntete.setLayout(new BoxLayout(panelEntete, BoxLayout.X_AXIS));
        panelEntete.setAlignmentX(Component.LEFT_ALIGNMENT);
        panelEntete.setOpaque(false);
        this.add(panelEntete);
        
        //Corps
        panelCorps = new JPanel();
        //panelCorps.setLayout(new BoxLayout(panelCorps, BoxLayout.PAGE_AXIS));
        panelCorps.setLayout(new GridLayout(6, 2, 0, 6));
        panelCorps.setAlignmentX(Component.LEFT_ALIGNMENT);
        panelCorps.setOpaque(false);
        this.add(panelCorps);
        
        //NomPrenom
        panelNomPrenom = new JPanel();
        panelNomPrenom.setLayout(new BoxLayout(panelNomPrenom, BoxLayout.PAGE_AXIS));
        //panelNomPrenom.setLayout(new GridLayout(2, 2, 0, 6));
        panelNomPrenom.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
        panelNomPrenom.setOpaque(false);
        
        //Icone
        labelIcone.setIcon(Controleur.Util.creerIcone(Controleur.Util.cheminIconeDefaut));
        labelIcone.setBorder(new EmptyBorder(5,7,0,0) );
        labelIcone.setPreferredSize(new Dimension(Util.tailleIcone, Util.tailleIcone));
        
        //Panel icone
        JPanel pan0 = new JPanel();
        pan0.setLayout(new BoxLayout(pan0, BoxLayout.LINE_AXIS));
        pan0.setOpaque(false);
        //pan0.setAlignmentX(Component.LEFT_ALIGNMENT);labelIcone.setAlignmentX(Component.LEFT_ALIGNMENT);
        pan0.add(labelIcone);
        panelEntete.add(pan0);
        panelEntete.add(panelNomPrenom);
        
        //Ajouts
        ajouter(panelNomPrenom, "", labelNom);
        panelNomPrenom.add(Box.createRigidArea(new Dimension(0, 5)));
        ajouter(panelNomPrenom, "", labelPrenom);
        ajouter(panelCorps, "Téléphone mobile : ", labelTelMobile);
        ajouter(panelCorps, "Téléphone maison : ", labelTelMaison);
        ajouter(panelCorps, "Téléphone bureau : ", labelTelBureau);
        ajouter(panelCorps, "Adresse : ", labelAdresse);
        ajouter(panelCorps, "Site web : ", labelSite);
        ajouter(panelCorps, "Email : ", labelEmail);
        
    }
        //panelNomPrenom.add(Box.createRigidArea(new Dimension(0, 15)));
    
    private void ajouter(JPanel conteneur, String intitule, JComponent composant){
        labelIntitule = new JLabel(intitule);
        labelIntitule.setForeground(DesignFenetre.labelIntituleColor);
        labelIntitule.setOpaque(false);
        //labelIntitule.setPreferredSize(new Dimension(20, 20));
        
        conteneur.add(labelIntitule);
        JPanel ppp = new JPanel();ppp.setLayout(new BoxLayout(ppp, BoxLayout.LINE_AXIS));ppp.setOpaque(false);ppp.add(composant);
        conteneur.add(ppp);
        
        fixerTaille(composant);
        
        //Personnalisation
        composant.setForeground(DesignFenetre.FGColorSelected);
        if(composant instanceof JTextField){
            composant.setOpaque(true);
            composant.setBackground(new Color(245,245,245));
        }
        else{
            composant.setOpaque(false);
        }
        
    }
    
    public void fixerTaille(JComponent composant){
        int largeur = composant.getWidth();
        largeur = 120;
        int hauteur = 22;//16
        composant.setSize(new Dimension(largeur, hauteur));
        composant.setPreferredSize(new Dimension(largeur, hauteur));
        composant.setMaximumSize(new Dimension(largeur, hauteur+1));
        composant.setMinimumSize(new Dimension(largeur, hauteur-1));
    }
    
    /**
     * Change les valeurs lorsque l'on selectionne un contact ou que l'on clique sur Modifier.
     * En fonction du parametre modeEdit, la fonction sait si elle modifie des JLabel ou des JTextField.
     * @param c
     * @param modeEdit 
     */
    public void updateValeurs(Contact c, boolean modeEdit){//Class/*<? extends JComponent>*/ Classe
        //System.out.println(Classe.getCanonicalName());
        
        idContact = c.identifiant;
        labelIcone.setIcon(Controleur.Util.creerIcone(c.cheminPhoto));
        
        //TODO faire fonction a la place d'un arrayList
        ArrayList<Object[]> ensembleElements = new ArrayList<Object[]>();
        ensembleElements.add(new Object[]{labelNom, c.getNom().toUpperCase()});
        ensembleElements.add(new Object[]{labelPrenom, c.getPrenom()});
        ensembleElements.add(new Object[]{labelTelMobile, c.getTelephoneMobile()});
        ensembleElements.add(new Object[]{labelTelMaison, c.getTelephoneMaison()});
        ensembleElements.add(new Object[]{labelTelBureau, c.getTelephoneBureau()});
        ensembleElements.add(new Object[]{labelAdresse, c.getAdresseMaison().toString()});
        ensembleElements.add(new Object[]{labelSite, c.getSiteWeb()});
        ensembleElements.add(new Object[]{labelEmail, c.getEmail()});
        
        for(Object[] e : ensembleElements){
            if(modeEdit){
                ((JTextField) e[0]).setText( ((String) e[1]) );
            }
            else{
                ((JLabel) e[0]).setText( ((String) e[1]) );
            }
        }
        /*
        ((
                JLabel
                ) this.labelNom).setText(c.getNom().toUpperCase());
        ((JLabel) this.labelPrenom).setText(c.getPrenom());

        ((JLabel) this.labelTelMobile).setText( c.getTelephoneMobile());
        ((JLabel) this.labelTelMaison).setText( c.getTelephoneMaison());
        ((JLabel) this.labelTelBureau).setText( c.getTelephoneBureau());

        ((JLabel) this.labelSite).setText( c.getSiteWeb());
        ((JLabel) this.labelEmail).setText( c.getEmail());*/
    }
    
    
}


